// 小程序消息订阅

/**
 * 每日运营通知（统计结果通知）
 *    统计指标 {{thing1.DATA}}
 *    统计内容 {{thing2.DATA}}
 */
const MSG_KEY_DAILY_NOTICE = 'MA5gAkd1FUb597yAYyY_GoNk9GE3THZeq0NKZmI31FY'

/**
 * 申请开通企业名片的审批通知（申请结果通知）
 * 申请人   {{thing2.DATA}}
 * 联系电话 {{phone_number9.DATA}}
 * 申请机构 {{thing1.DATA}}
 * 申请类型 {{thing4.DATA}}
 * 申请时间 {{time14.DATA}}
 */
const MSG_KEY_AUDIT_NOTICE = "JvRynPzFi3MpFD2g5D6K7jtCmddUa9i5UyafL6nopxs"


/**
 * 消息订阅（小程序）
 */
const subScribeMsg = () => {
	return new Promise((resolve, reject) => {
		uni.getSetting({
			withSubscriptions: true,
			success: (res) => {
				console.log('授权信息:', res)
				console.log('消息订阅：', res.subscriptionsSetting)
				if (!res.subscriptionsSetting.mainSwitch) {
					// 总是保持以上选择，未选择
					console.log('总是保持以上选择，未选择，打开设置页面')
					// 打开设置页面
					uni.openSetting({
						success: (res1) => {
							console.log('打开设置页面，成功：', res1.authSetting)
						},
						fail: (err1) => {
							console.error('打开设置页面，失败：', err1)
						}
					})
				} else {
					if ('itemSettings' in res.subscriptionsSetting) {
						let subscribeResult = res.subscriptionsSetting.itemSettings[MSG_KEY_AUDIT_NOTICE]
						if (subscribeResult == 'reject') {
							// 用户已拒绝
							console.log('总是保持以上选择：用户已拒绝，打开设置页面')
							// 打开设置页面
							uni.openSetting({
								success: (res1) => {
									console.log('打开设置页面，成功：', res1.authSetting)
								},
								fail: (err1) => {
									console.error('打开设置页面，失败：', err1)
								}
							})
						} else if (subscribeResult == 'accept') {
							// 用户已接受
							console.log('总是保持以上选择：用户已接受，继续订阅')
							// 继续订阅
							requestSubscribeMsg(resolve, reject)
						}  else {
							// 继续订阅
							requestSubscribeMsg(resolve, reject)
						}
					} else {
						// 消息订阅是：总是保持以上选择的订阅
						// 继续订阅
						requestSubscribeMsg(resolve, reject)
					}
				}
			},
			fail: (err) => {
				console.error('未获取到消息订阅：', err)
			}
		})
	})
}

/**
 * 请求订阅消息
 */
const requestSubscribeMsg = (resolve, reject) => {
	// 每日运营通知（统计结果通知）
	uni.requestSubscribeMessage({
		tmplIds: [MSG_KEY_AUDIT_NOTICE], 
		success: (res) => {
			console.log('------requestSubscribeMessage success:', res)
			if (res.errMsg == 'requestSubscribeMessage:ok') {
				// 调用成功
				let subscribeResult = res[MSG_KEY_AUDIT_NOTICE]
				if (subscribeResult == 'accept') {
					// 用户已接受
					console.log('------requestSubscribeMessage success: 用户已接受')
					uni.showToast({
						title: '您已接受消息订阅', 
						duration: 2000
					})
					resolve(res)
				} else if (subscribeResult == 'reject') {
					// 用户已拒绝
					console.log('------requestSubscribeMessage fail: 用户已拒绝')
					uni.showToast({
						title: '您已拒绝消息订阅', 
						duration: 2000
					})
					reject('用户已拒绝')
				} else if (subscribeResult == 'filter') {
					// 该模板因为模板标题同名被后台过滤
					console.log('------requestSubscribeMessage fail: 该模板因为模板标题同名被后台过滤')
					reject('该模板因为模板标题同名被后台过滤')
				}
			} else {
				// 调用失败
				console.log('------requestSubscribeMessage: 调用失败')
				reject('调用失败')
			}
		}, 
		fail: (err) => {
			// 调用失败
			// errMsg, errCode
			console.error('------requestSubscribeMessage fail:', err)
			reject(err)
		}
	})
}

export {
	/**
	 * 消息订阅（小程序）
	 */
	subScribeMsg
}